算法学习(寒假打卡)——05反转单词前缀(java中简单方法的了解)

2000.反转单词前缀

给你一个下标从 0 开始的字符串 word 和一个字符 ch 。找出 ch 第一次出现的下标 i ,反转 word 中从下标 0 开始、直到下标 i 结束(含下标 i )的那段字符。如果 word 中不存在字符 ch ,则无需进行任何操作。

例如,如果 word = “abcdefd” 且 ch = “d” ,那么你应该 反转 从下标 0 开始、直到下标 3 结束(含下标 3 )。结果字符串将会是 “dcbaefd” 。返回 结果字符串 。

示例 1:
输入:word = “abcdefd”, ch = "d"
输出:“dcbaefd”
解释:“d” 第一次出现在下标 3 。
反转从下标 0 到下标 3(含下标 3)的这段字符,结果字符串是 “dcbaefd”

示例 2:
输入:word = “abcd”, ch = "z"
输出:“abcd”
解释:“z” 不存在于 word 中。
无需执行反转操作,结果字符串是 “abcd” 。

提示:

  • 1 <= word.length <= 250
  • word 由小写英文字母组成
  • ch 是一个小写英文字母

1、自己的初始想法,定义一个字符数组来存放字符串中的字符,找到目标字符开始进行反转,分析前缀的奇偶开始进行反转。

//双指针&字符串
public static String reversePrefix(String word, char ch) {
       int index = 0;
       char middle;
       //定义字符数组,来存放字符串中的字符并且进行后面的反转操作
       char arr[] = new char[word.length()];
       for(int i = 0;i < word.length();i++){
           arr[i] = word.charAt(i);
       }
       //找到字符在字符串中首次出现的下标
       for(int j = 0;j < word.length();j++){
           if(arr[j] == ch){
               index = j;
               break;
           }
       }
       if(index == 0) return word;
       //双指针开始反转字符
       int p = 0,q = index;
       if((index % 2) == 0){
           //需要反转奇数个,则中间一个不动两头对称反转
           while(p < (index / 2)){
               middle = arr[p];
               arr[p] = arr[q];
               arr[q] = middle;
               p++;
               q--;
           }
       }else{
           //需要反转偶数个,对称反转
           while(p < (index / 2 + 1)){
               middle = arr[p];
               arr[p] = arr[q];
               arr[q] = middle;
               p++;
               q--;
           }
       }
       //将字符数组转化为字符串
       String string=String.valueOf(arr);
       return string;
   }

2、题解以及过程优化

public static String reversePrefix(String word, char ch) {
     char middle;
     //找到字符在字符串中的下标 1、indexOf
     int index = word.indexOf(ch);
     //字符串转为字符串数组 2、toCharArray()
     char[] arr = word.toCharArray();
     int p = 0,q = index;
     //index大于0开始进行反转
     if(index > 0){
     	 //可以直接判断p<q来进行反转
         while(p < q){
             middle = arr[p];
             arr[p] = arr[q];
             arr[q] = middle;
             p++;
             q--;
         }
         //字符数组转化为3、字符串String.valueOf()
         return String.valueOf(arr);
     }
     return word;
 }

这一下代码就简洁了不少,所以说还是要巧用字符串的一些方法鸭~
1、indexOf 提供两个参数
indexOf(int ch): 返回指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

indexOf(int ch, int fromIndex): 返回 从 fromIndex 位置(包含此位置) 开始查找指定字符在字符串中第一次出现处的索引,如果此字符串中没有这样的字符,则返回 -1。

public class Main {
    public static void main(String args[]) {
        String string = "aaa456ac";
        //查找指定字符是在字符串中的下标。在则返回所在字符串下标;不在则返回-1.
        System.out.println(string.indexOf("b")); // indexOf(String str); 返回结果:-1,"b"不存在
        // 从第四个字符位置开始往后继续查找,包含当前位置
        System.out.println(string.indexOf("4",3));//indexOf(String str, int fromIndex); 返回结果:3
    }
}

2、字符串转为字符数组 toCharArray()
char[] arr = word.toCharArray();
3、字符数组转化字符串
String string = String.valueOf(arr);

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值