Golang面试题目-字符串是否一致验证

题目:给定字符串A、B,B为A排序后的结果,设计一算法验证A、B内容是否一致。

要求:

  1. 大小写为不同字符(考虑空格对算法精度的影响)。

  2. 输入字符串A、B,返回bool,true为相同,false为不同。

  3. 字符串A、B长度小于或等于5000。

解答:先验证字符串A、B长度小于或等于5000,之后只需要循环遍历B中的字符在A中是否都存在。

案例如下:

package main

import "strings"

func ABIsSame(strA, strB string) bool {
  ARune, BRune := []rune(strA), []rune(strB)
  if len(ARune) > 5000 || len(BRune) > 5000 || len(ARune) != len(BRune) {
    return false
  }

  for _, val := range BRune {
    if strings.Count(strB, string(val)) != strings.Count(strA, string(val)) {
      return false
    }
  }
  return true
}

上述代码核心是用Golang内置方法strings.Count验证字符是否⼀致。

题目:设计⼀个算法判断字符串中所有字符【是否全都不同】。指定⼀个string,返回bool,true意为所有字符全都不相同,false意为存在相同字符,字符串必须为ASCII字符,字符串长度小于或等于3000。

要求:不允许使⽤额外的存储结构。 

要点分析:

  1. ASCII字符,⼀共有256个,其中128个是常用字符,可在键盘输入,其它是键盘上没有的。

  2. 全部不相同,意为字符串中的字符没有重复的,也可以理解为这个字符串的字符是否都是只出现一次。

  3. 不准使用额外的储存结构,且字符串小于或等于3000。

根据分析,我们可以使用Golang内置函数来实现,有AB两种方式。

案例如下:


package main

import "strings"

// A方案:strings.Count函数处理
func IsUniqueStringA(str string) bool {
  if strings.Count(str, "") > 3000 {
    return false
  }

  for _, val := range str {
    if val > 127 {
      return false
    }

    if strings.Count(str, string(val)) > 1 {
      return false
    }
  }

  return true
}

// B方案:strings.Count、 strings.Index、 strings.Index函数处理
func IsUniqueStringB(str string) bool {
  if strings.Count(str, "") > 3000 {
    return false
  }

  for key, val := range str {
    if val > 127 {
      return false
    }

    if strings.Index(str, string(val)) != key {
      return false
    }
  }

  return true
}

上述代码中A用的是golang内置方法strings.Count用以判断字符串中包含的另外一个字符串的数量,B用的是golang内置方法strings.Index和 strings.LastIndex ,用以判断指定字符串在另⼀字符串的索引位置,分别是第⼀次发现位置和最后发现位置。

扫码关注公众号获取更多内容。。。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luyaran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值